#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

//看到三个状态：
//1.子进程由S状态变成Z状态
//2.Z状态在打印完“等待成功”时候就没了
//3.等待的返回值就是子进程的pid

int main()
{
    pid_t id = fork();
    if(id == 0)
    {
        //子进程创建成功
        while(1)
        {
            printf("我是子进程, 我正在运行...Pid: %d\n", getpid());
            sleep(1);
        }

    //要在30s之内将子进程干掉……
    //干掉之后未满30s的时候子进程处于僵尸状态
    }
    else
    {
        //父进程
    
        //想看到等待成功之后僵尸进程就不见了
        printf("我是父进程：pid:%d, 我准备电脑等待子进程啦\n", getpid());
        sleep(30);

        //30s之后父进程一醒来就直接把子进程回收掉，就看到了Z状态没了(子进程被掉了)
        //wait之后子进程就相当于退出了
        
        pid_t ret = wait(NULL);

        if(ret < 0)
        {
            printf("等待失败！\n");
        }
        else 
        {
            printf("等待成功: result: %d\n", ret);
        }

        //父进程等20后再退出
        sleep(20);
    }
}

